# R-MASM 翻译器的 GUI 界面

import tkinter as tk
from tkinter import ttk
import tkinter.filedialog
import tkinter.font as font

app = tk.Tk()
app.iconbitmap("R.ico")
app.title("R-MASM v0.8 Translator GUI")
app.geometry('800x630')

file_path_var = tk.StringVar()
file_path_var.set("./input.txt")
auto_copy_var = tk.IntVar()


def translate():
    from rmasm import translater
    from rmasm.utils import load_code_file
    if auto_copy_var.get():
        app.clipboard_clear()
    # 读取
    try:
        code = load_code_file(file_path_var.get())
    except Exception as e:
        result_text.config(fg='#f00')
        result_text.delete(1.0, 'end')
        result_text.insert('end', str(e))
        return
    # 翻译
    t = translater.Translator(code.content)
    try:
        mlog = t.translate()
    except Exception as e:
        result_text.config(fg='#f00')
        result_text.delete(1.0, 'end')
        result_text.insert('end', str(e))
        return
    # 显示结果和复制
    if auto_copy_var.get():
        app.clipboard_append(mlog)
    result_text.config(fg='#000')
    result_text.delete(1.0, 'end')
    result_text.insert('end', mlog)


def select_file():
    file = tkinter.filedialog.askopenfilename(title='选择文件')
    if not file:
        return
    file_path_var.set(file)
    translate_button.pack()


label1 = ttk.Label(app, textvariable=file_path_var)
label1.pack()

frame1 = ttk.Frame(app)
select_file_button = ttk.Button(frame1, width=10, text='选择文件', command=select_file)
select_file_button.pack(side='left')
translate_button = ttk.Button(frame1, width=30, text="翻译", command=translate)
translate_button.pack(side='left', ipady='12')
auto_copy_check = ttk.Checkbutton(frame1, text="翻译后自动复制", variable=auto_copy_var, onvalue=1, offvalue=0)
auto_copy_check.pack(side='left')

frame1.pack()

# 占位符
tk.Label(app).pack()

result_text = tkinter.Text(app, font=font.Font(family="Arial", size=14), height=24)
result_text.insert("end", "# 选择一个文件，然后点击翻译按钮，这里会出现翻译结果。\n\n"
                          "# 关于 R-MASM 语言的详细教程可以看 《R-MASM 入门教程.md》 和 《R-MASM 文档.md》 文件，它们应该在 doc 目录里面。\n\n"
                          '# include 导入的类库文件在当前目录的 lib 文件夹下，这里还包含内置库的帮助文档。\n\n'
                          "# 支持的游戏版本：135\n"
                          "# R-MASM版本：v0.8.1\n"
                          "# 可视化翻译器版本：v0.1.1\n"
                          "# 协作开发联系 QQ 2293840045")
result_text.pack()

app.mainloop()
